目前tinyML基金會並沒有強制規範何種規格的硬體、AI框架、模型大小(複雜度)、推論速度等才算符合,而功率消耗上本來是希望在1mW(毫瓦)以下,後來變成mW(1W以下)等級,現在連樹莓派或Nvidia Jetson Nano 5~15W都可算在其中。所以換句話說能拿在手上,用電池(或行動電源)供電並能長時間運行的邊緣智能裝置都算tinyML的範圍,因此大家也不用太計較。
前面已簡單準備好的tinyML的球(開發板)和奪命香雞腿[大力金鋼腿](Arduino IDE軟體開發平台),接下來就要開始了解如何踢球,就是tinyML (MCU AI) 開發的開發步驟。
Fig. 1 AI產品開發流程圖
首先要先定義好待解決的應用問題類型,才能有效決定出後續要處理的工作細項。其類型主要分為電腦視覺(Computer Vision, CV)、自然語言處理(Natural Language Processing, NLP)和數據分析(Data Analytics),其中最後一項亦可看作從大量感測器所收集到的資料處理、分析、預測。在電腦視覺類問題,常見有影像分類、物件偵測、影像分割(語義分割、實例分割、全景分割)、姿態估測(人體骨架分析、動作分析)等。而自然語言處理問題,常見的有語音轉文字、語調(情緒)分析、語言(意圖)理解、文字轉語音等自然對話情境。而數據分析問題,通常也是智慧物聯網(AIoT)最常會遇到的問題,包括聚類、時序預測等。
問題設定好就要開始收集及標註資料,依不同類型可能有影像、影片、聲音、文字、序列資料等型態資料。有些學術單位會提供公開資料集方便大家測試和實作使用,如ImageNet, Microsof COCO, Paper with Code, Kaggle等。當然遇到不在公開資料集內容的,就要靠自己收集。再來依不同資料型態,可利用如LabelImg, LabelMe, CVAT, SuperAnnotation等開源或商用軟體來進行標註工作。以影像標註為例,又可分內容及外形(如點、線、框、曲線、超像素等)。
和公開資料集類似,也有很多常用模型會被開源,直接拿來就可使用,也不用重新訓練。但有時沒有可用的,或資料型態特別,需要自己開發時,則需使用像 TensorFlow, PyTorch, ONNX, MXNet, Caffe等框架進行開發。而工程師再花許多時間來訓練模型和調整參數,以求推論達到最高效率、精準度最優結果。
最後是邊緣智能產品的重頭戲,包含數值量化、模型剪枝(合併)、模型壓縮及知識蒸餾,來協助把模型變小,但推論精準度不減或只減很少,同時提升執行速度。這部份對於tinyML(MCU AI)是重中之重,能不能把訓練好的大模型塞到實體MCU中就是最大的挑戰,這部份後面會再詳述。
今天先簡單建立一個AI產品開發流程的概念,後面會再展開細講,敬請期待。
ps. 為讓文章更活潑傳達硬梆梆的技術內容,所以引用了經典電影「少林足球」的橋段,在此對星爺及電影公司致上崇高的敬意,希望小弟戲劇性的二創不會引起電影公司的不悅,敬請見諒。